perm filename RDHELP.SAI[PIC,HE] blob sn#430344 filedate 1979-04-04 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00002 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	ENTRY RDHELP
C00007 ENDMK
C⊗;
ENTRY RDHELP;
BEGIN "RDHELP"
REQUIRE "BAYSAI.SAI" SOURCE!FILE;
SOURCE!L(UTILS.DCL);
EXTERNAL PROCEDURE TYPHLP(STRING CMDSTR,FILNAM);

REQUIRE "⊂⊃<>" DELIMITERS;

IFC FALSE THENC
INTEGER SKIPSP,GETWRD;

SIMPLE STRING PROCEDURE CDECODE(REFERENCE STRING STR);
    BEGIN "DECODE"
    SCAN(STR,SKIPSP,0);
    RETURN(SCAN(STR,GETWRD,0));
    END "DECODE";

! Procedure to read a help message file
;
ENDC
SIMPLE INTERNAL PROCEDURE RDHELP(STRING CMDSTR,HLPFIL);
    BEGIN "CHELP"
    IFC FALSE THENC
    INTEGER BRK1,BRK2,BRCHAR,EOF,FLG,CNT,chan;
    BOOLEAN FOUND;
    STRING STR,SDUM,CUR,PREV,command;
    SIMPLE PROCEDURE RELALL;
	BEGIN RELBREAK(BRK1); RELBREAK(BRK2); RELBREAK(SKIPSP); RELBREAK(GETWRD); END;
    GETDEV(SDUM←HLPFIL,"HLP");
    CHAN←OPENFILE(SDUM,"RC");
    IF CHAN<0 THEN RETURN;
    SETINPUT(CHAN,400,BRCHAR,EOF);
    SETBREAK(BRK1←GETBREAK,"%","∩∂%"&'14&NULL,"NIS");
    SETBREAK(BRK2←GETBREAK,LF,CRLF&'14&NULL,"NIS");
    SETBREAK(SKIPSP←GETBREAK," ",NULL,"XNR");
    SETBREAK(GETWRD←GETBREAK," ",NULL,"INR");
    COMMAND←CDECODE(CMDSTR);
    IF COMMAND=NULL THEN
	BEGIN
	FOUND←FALSE;
	WHILE NOT FOUND AND ¬EOF DO
	    BEGIN
	    WHILE BRCHAR≠"%" AND ¬EOF DO STR←INPUT(CHAN,BRK1);
	    STR←INPUT(CHAN,BRK2);
	    IF EQU(CDECODE(STR),"HELP") THEN FOUND←TRUE;
	    END;
	IF NOT FOUND THEN
	    BEGIN
	    PRINT("No general help",crlf);
	    CFILE(CHAN);
	    RELALL;
	    return;
	    end;
	PRINT(CRLF);
	WHILE ¬EOF AND BRCHAR≠"%" DO PRINT(INPUT(CHAN,BRK1));
	PRINT(CRLF);
	CFILE(CHAN);
	RELALL;
	RETURN;
	END;
    CNT←0;
    WHILE ¬EOF DO
	BEGIN
	WHILE BRCHAR≠"%" AND ¬EOF DO STR←INPUT(CHAN,BRK1);
	STR←INPUT(CHAN,BRK2);
	IF EQU(COMMAND,(CUR←CDECODE(STR))[1 FOR LENGTH(COMMAND)]) THEN
	    BEGIN
	    IF (CNT←CNT+1)=1 THEN PREV←CUR
	    ELSE IF CNT=2 THEN 
		PRINT(COMMAND," is ambiguous with: ",prev," and ",cur)
	    ELSE PRINT(" AND ",CUR);
	    END;
	END;
    CFILE(CHAN);
    IF CNT≠1 THEN
	BEGIN
	IF CNT=0 THEN PRINT("Area of ",command," not found");
	PRINT(CRLF);
	RELALL;
	RETURN;
	END;
    GETDEV(SDUM←HLPFIL,"HLP");
    CHAN←OPENFILE(SDUM,"RC");
    IF CHAN<0 THEN
	BEGIN
	RELALL;
	return;
	end;
    SETINPUT(CHAN,400,BRCHAR,EOF);
    FOUND←FALSE;
    WHILE NOT FOUND AND ¬EOF DO
	BEGIN
	WHILE BRCHAR≠"%" AND ¬EOF DO STR←INPUT(CHAN,BRK1);
	STR←INPUT(CHAN,BRK2);
	IF EQU(COMMAND,CDECODE(STR)[1 FOR LENGTH(COMMAND)]) THEN FOUND←TRUE;
	END;
    IF NOT FOUND THEN
	BEGIN
	PRINT("Area ",command," not found",crlf);
	CFILE(CHAN);
	RELALL;
	RETURN;
	END;
    PRINT(CRLF);
    WHILE ¬EOF AND BRCHAR≠"%" DO PRINT(INPUT(CHAN,BRK1));
    PRINT(CRLF);
    RELALL;
    CFILE(CHAN);
    RETURN;
    ELSEC GETDEV(HLPFIL,"HLP");
    TYPHLP(CMDSTR,HLPFIL);
    ENDC
    END "CHELP";

REQUIRE UNSTACK!DELIMITERS;
END "RDHELP";